Skip to content

Add guard for empty disparate_dir in sync_instance#41

Open
rippleitinnz wants to merge 1 commit intomainfrom
fix/disparate-dir-guard
Open

Add guard for empty disparate_dir in sync_instance#41
rippleitinnz wants to merge 1 commit intomainfrom
fix/disparate-dir-guard

Conversation

@rippleitinnz
Copy link
Copy Markdown
Contributor

Change

Add a guard to the disparate_dir cleanup in sync_instance to prevent accidental deletion of the contract state directory when DISPARATE_DIR is not set.

Background

The disparate directory feature was introduced in the beta devkit image to support multisig deployments. The cluster script assumes DISPARATE_DIR is always set, however older NPM packages (below v0.6.8) do not pass this environment variable, leaving $disparate_dir as an empty string.

With an empty $disparate_dir this line:

[ -d $contract_dir/contract_fs/seed/state/$disparate_dir ] && rm -r $contract_dir/contract_fs/seed/state/$disparate_dir

Evaluates to:

[ -d $contract_dir/contract_fs/seed/state/ ] && rm -r $contract_dir/contract_fs/seed/state/

Deleting the entire state directory immediately after the contract bundle is copied in.

Change

Add a guard so the deletion only runs when $disparate_dir is actually set:

# Before
[ -d $contract_dir/contract_fs/seed/state/$disparate_dir ] && rm -r $contract_dir/contract_fs/seed/state/$disparate_dir

# After
[ -n "$disparate_dir" ] && [ -d $contract_dir/contract_fs/seed/state/$disparate_dir ] && rm -r $contract_dir/contract_fs/seed/state/$disparate_dir

Notes

  • NPM v0.6.8 correctly passes DISPARATE_DIR=disparate and is required for full beta devkit compatibility
  • This guard is defensive programming to protect against the state directory being accidentally deleted if an older NPM package is used with the beta image
  • For non-multisig deployments the disparate directory cleanup is skipped entirely which is the correct behaviour

## Change

Add a guard to the `disparate_dir` cleanup in `sync_instance` to 
prevent accidental deletion of the contract state directory when 
`DISPARATE_DIR` is not set.

## Background

The `disparate` directory feature was introduced in the beta devkit 
image to support multisig deployments. The cluster script assumes 
`DISPARATE_DIR` is always set, however older NPM packages (below 
v0.6.8) do not pass this environment variable, leaving `$disparate_dir` 
as an empty string.

With an empty `$disparate_dir` this line:
```bash
[ -d $contract_dir/contract_fs/seed/state/$disparate_dir ] && rm -r $contract_dir/contract_fs/seed/state/$disparate_dir
```

Evaluates to:
```bash
[ -d $contract_dir/contract_fs/seed/state/ ] && rm -r $contract_dir/contract_fs/seed/state/
```

Deleting the entire state directory immediately after the contract 
bundle is copied in.

## Change

Add a guard so the deletion only runs when `$disparate_dir` is 
actually set:
```bash
# Before
[ -d $contract_dir/contract_fs/seed/state/$disparate_dir ] && rm -r $contract_dir/contract_fs/seed/state/$disparate_dir

# After
[ -n "$disparate_dir" ] && [ -d $contract_dir/contract_fs/seed/state/$disparate_dir ] && rm -r $contract_dir/contract_fs/seed/state/$disparate_dir
```

## Notes

- NPM v0.6.8 correctly passes `DISPARATE_DIR=disparate` and is 
required for full beta devkit compatibility
- This guard is defensive programming to protect against the state 
directory being accidentally deleted if an older NPM package is used 
with the beta image
- For non-multisig deployments the disparate directory cleanup is 
skipped entirely which is the correct behaviour
@rippleitinnz rippleitinnz requested a review from du1ana March 31, 2026 10:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant